home *** CD-ROM | disk | FTP | other *** search
/ Black Crawling Systems Archive Release 1.0 / Black Crawling Systems Archive Release 1.0 (L0pht Heavy Industries, Inc.)(1997).ISO / blackcrwl / elctrnic / tvirspec.txt < prev    next >
Text File  |  1996-08-24  |  15KB  |  363 lines

  1. Article 71798 of sci.electronics:
  2. Path: earth.armory.com!nic.scruz.net!nbn!miwok!well!pacbell.com!ames!agate!library.ucla.edu!csulb.edu!nic-nac.CSU.net!usc!math.ohio-state.edu!jussieu.fr!univ-lyon1.fr!swidir.switch.ch!newsfeed.ACO.net!Austria.EU.net!EU.net!uunet!news.iij.ad.jp!wnoc-tyo-news!news.u-tokyo.ac.jp!sinetnews!wsclark!kuis-news!onat
  3. From: onat@turbine.kuee.kyoto-u.ac.jp (Onat Ahmet)
  4. Newsgroups: sci.electronics
  5. Subject: Re: IR remote control 1/2
  6. Date: 13 Sep 1994 09:47:51 GMT
  7. Organization: Dept. of Information Science, Kyoto University, JAPAN
  8. Lines: 346
  9. Distribution: world
  10. Message-ID: <353sg7$s2l@hemp.imel.kyoto-u.ac.jp>
  11. References: <ho0Tn6X.bartolinator@delphi.com>
  12. NNTP-Posting-Host: daimler.kuee.kyoto-u.ac.jp
  13. X-Newsreader: mnews [version 1.18PL3] 1994-08/01(Mon)
  14.  
  15.  
  16. Here is the info about IR remote controls, in two parts. I hope they
  17. help. I did not write either of them though...
  18.  
  19. Ahmet ONAT
  20.  
  21.  
  22. From: PUTZGER@alf2.ngate.uni-regensburg.de (JUERGEN PUTZGER (TEL. 4218))
  23. Subject: Decoding IR remote controls with 8052
  24.  
  25.                        DECODING IR REMOTE CONTROLS
  26.                            by Juergen Putzger
  27.  
  28.  
  29. The origin of this posting was the question what to do with an old TV. 
  30. I suggested to use the infrared remote control as an input keyboard for a
  31. microcontroller board and mentioned a piece of code I had written for
  32. the 8052 microcontroller.  I was asked by some people to share my 
  33. information about remote controls, so here it is:
  34.  
  35. There are at least two international standards which are used by remote 
  36. controls to encode the commands, the RC5 and RECS 80 code. The RECS 80
  37. code uses pulse length modulation. Each bit to be transmitted is encoded
  38. by a high level of the duration T followed by a low level of duration 2T
  39. representing a logical '0' or 3T representing a logical '1'.
  40.  
  41.   T 2T T 3T  T 2T
  42.   _    _     _ 
  43.  | |  | |   | |
  44. _| |__| |___| |__
  45.   0    1     0
  46.  
  47. Notice that a '1' takes more time to be transmitted than a '0'. The RC 5 code
  48. instead has a uniform duration of all bits. A transition in the middle of the
  49. time interval assigned to each bit encodes the logical value. A '0' is encoded
  50. by a high to low transition and a '1' by a low to high transition. Therefore
  51. we need additional transitions at the beginning of each bit to set the proper 
  52. start level if a series of equal bits is sent. We don't need this additional
  53. transition if the next bit has a different value. This is also called a 
  54. 'biphase' code.
  55.  
  56. |1.Bit|2.Bit|3.Bit|4.Bit|             
  57.  __    __       __    __
  58.    |  |  |     |  |  |  
  59.    |__|  |_____|  |__|  
  60.    0     0     1     1
  61.  
  62. Instead of being fed direct into the IR emitter, most remote controls modulate
  63. a 20-30 kHz carrier with this signal. A logic one is represented by a burst of 
  64. oscillations.
  65.  
  66. ______/\/\/\/\_______/\/\/\/\________
  67.   0      1       0       1      0
  68.  
  69. The reason is, that you can use a filter tuned to the carrier frequency
  70. to distinguish the signal from noise in the ambient light. Fluorescent lamps
  71. are the main source of such noise. Photodiodes behind  an optical filter
  72. which transmits infrared light but blocks visible light are used as detectors.
  73. The signal from the photodiode is fed through a filter tuned to the carrier 
  74. fequency and then amplified. The amplified signal is demodulated just like
  75. the carrier is demodulated in any AM radio receiver.
  76.  
  77.      +
  78.      |
  79.     _|_  photodiode
  80.     /_\                 demodulator
  81.      |      |\                             
  82.     _|_ ____| \_____| |__ __|\|___ ____            L and C form a 
  83.    |   |    | /     | |  |  |/|   |    signal      circuit resonant
  84.    |   /    |/          _|_       |    out         to the carrier
  85.   ===  \    amplifier   /_\      ===
  86.    |C  / L               |        |
  87.    |___|_________________|________|____    
  88.    
  89.  
  90. It can be a lot of pain to design a sensitive receiver that does'nt 
  91. start to oscillate. It is also necessary to have some automatic gain
  92. control to avoid overload of the amplifier at close distance to the
  93. emitter. It is easier to use some integrated circuit that does
  94. all of the job. The best i have ever seen (and used) is the SFH505A 
  95. manufactured by SIEMENS (no, I don't work for this company). It looks 
  96. like one of this three legged voltage regulators and uses a single 5V
  97. supply. It incorporates an optical filter, the photodiode, a filter 
  98. tuned to about 30 kHz , the amplifier with automatic gain control and
  99. the demodulator.
  100.  
  101. If you don't know which code your remote control is transmitting you can 
  102. identify it by viewing the output of your receiver with an oscilloscope.
  103. The RECS 80 code uses high pulses of uniform length while the low pulses 
  104. differ in length. If there are high and low pulses of two different lengths
  105. it might be RC5 code. Note that your receiver may invert the levels.
  106.  
  107. How are commands like volume control or channel selction encoded? In the
  108. case of the RC5 code there is an international standard. Every command is
  109. encoded by 14 bits. The first two bits S are startbits to allow the receiver
  110. to adjust the automatic gain control and to synchronize. Next a bit T 
  111. follows, that toggles with every new keystroke. Next is the address A of 
  112. the  device which shall respond to the command. At last the command itself 
  113. follows.
  114.   
  115.   | S | S | T | A4 | A3 | A2 | A1 | A0 | C5 | C4 | C3 | C2 | C1 | C0 |
  116.  
  117.  
  118. Some important addresses and commands:
  119.  
  120. Address:          Device:          Command:           
  121.   0               TV1              0...9    Numbers 0...9 (channel select)
  122.   1               TV2              12       Standby 
  123.   5               VCR1             16       Master Volume + 
  124.   6               VCR2             17       Master Volume - 
  125.  17               Tuner            18       Brightness +
  126.  18               Audio Tape       19       Brightness -
  127.  20               CD Player        50       Fast rewind
  128.                                    52       Fast run forward
  129.                                    53       Play 
  130.                                    54       Stop
  131.                                    55       Recording
  132.  
  133.  
  134. There are integrated decoder circuits which have inputs to select the device 
  135. address and parallel outputs activated by the commands. Since this is comp.
  136. robotics the devices you wish to control will have a microcontroller on board
  137. which can do all the decoding. Here is an input routine I have written for 
  138. the 8052 microcontroller family to receive RC5 codes. My cousin has written 
  139. a similar routine for the RECS80 code which i will try to make available also.
  140. Perhaps we can start a collection of such routines and archive them somewhere.
  141.  
  142.  
  143. Juergen Putzger (still looking for that public domain 8052 C-compiler....)
  144.  
  145.  
  146.  ------------------------ source text begins here -------------------------
  147.  
  148.  
  149. ;  ---------==========----------==========---------=========---------
  150. ;         Interrupt Driven Receiving Routine for RC5 code
  151. ; written by Juergen Putzger (juergen.putzger@physik.uni-regensburg.de)
  152. ;  ---------==========----------==========---------=========---------
  153.  
  154. $MOD52
  155.  
  156. INPUT   EQU     P3.2    ; Port3,Bit2 is used as input. The demodulated signal 
  157.                         ; with active low level is connected to this pin     
  158. LF      EQU     0AH     ; Linefeed     
  159. CR      EQU     0DH     ; Carriage return
  160. SPC     EQU     20H     ; Space
  161. RB0     EQU     000H    ; Select Register Bank 0
  162. RB1     EQU     008H    ; Select Register Bank 1  ...poke to PSW to use
  163.  
  164.  
  165.  
  166.         DSEG            ; This is internal data memory
  167.         ORG     20H     ; Bit adressable memory
  168.  
  169. FLAGS:  DS      1      
  170. CONTROL BIT     FLAGS.0  ; toggles with every new keystroke
  171. NEW     BIT     FLAGS.1  ; Bit set when a new command has been received 
  172.  
  173. COMMAND: DS     1       ; Received command byte
  174. SUBAD:  DS      1       ; Device subaddress 
  175. BUFFER: DS      30      ; Buffer to store length of transmitted pulses
  176. STACK:  DS      1       ; Stack begins here               
  177.  
  178.  
  179.  
  180.  
  181.         CSEG            ; Code begins here
  182.  
  183. ;---------==========----------==========---------=========---------
  184. ;              PROCESSOR INTERRUPT AND RESET VECTORS
  185. ;---------==========----------==========---------=========---------
  186.  
  187.          ORG     00H    ; Reset
  188.          JMP     MAIN
  189.         
  190.          ORG     0003H  ; External Interrupt0
  191.          JMP     RECEIVE
  192.          
  193.  
  194.  
  195. ;  ---------==========----------==========---------=========---------
  196. ;                            Output routines
  197. ;        Don$B4t(B forget to set up the serial port and Baud rate !            
  198. ;  ---------==========----------==========---------=========---------
  199.  
  200. N_OUT:  ADD     A,#30H  ;Convert BCD number to ASCII
  201. C_OUT:  JNB     TI,$    ;Wait until transmission completed.
  202.         CLR     TI      ;Clear interrupt flag.
  203.         MOV     SBUF,A  ;Write out character to serial port.
  204.         RET
  205.  
  206.  
  207. BIN2BCD:                ;Convert 8 bit value in Acc to 3 digit BCD 
  208.         MOV     B,#100          
  209.         DIV     AB      
  210.         CALL    N_OUT
  211.         XCH     A,B
  212.         MOV     B,#10
  213.         DIV     AB
  214.         CALL    N_OUT
  215.         XCH     A,B
  216.         CALL    N_OUT
  217.         RET
  218.  
  219.  
  220.  
  221. ;  ---------==========----------==========---------=========---------
  222. ;  Interrupt routine is entered by the first high to low transition
  223. ;  at Port3-Bit2. Stores the length of all pulses occuring at this
  224. ;  pin in buffer. Analyzes the timing of the startbits to calculate
  225. ;  a threshold between short and long pulses. This routine is 
  226. ;  independent of CPU speed. The device address and command are 
  227. ;  extracted from the bit stream. Two flags are set upon exit,
  228. ;  the control bit which toggles with every new keystroke and the 
  229. ;  NEW bit indicating that a new command has been received.    
  230. ;  ---------==========----------==========---------=========---------
  231.  
  232. RECEIVE:
  233.          PUSH   PSW           ; save current registerset
  234.          MOV    PSW,#RB1
  235.          PUSH   ACC
  236.          MOV    R0,#BUFFER
  237. REC:     MOV    A,#0
  238. REC0:    INC    A             ; Measure duration of low-level  
  239.          NOP
  240.          NOP                  ; Delay 
  241.          NOP                 
  242.          NOP
  243.          JZ     TIMEOUT       ; End of transmission if duration exeeds 256 counts
  244.          JNB    INPUT,REC0 
  245.          MOV    @R0,A
  246.          INC    R0
  247.          MOV    A,#0          
  248. REC1:    INC    A             ; Measure duration of high-level
  249.          NOP
  250.          NOP                  ; Delay
  251.          NOP
  252.          NOP
  253.          JZ     TIMEOUT       ; End of transmission
  254.          JB     INPUT,REC1
  255.          MOV    @R0,A
  256.          INC    R0
  257.          JMP    REC    
  258. TIMEOUT:  
  259.          MOV    A,BUFFER      ; calculate threshold between short and long pulses 
  260.          INC    R0            ; length of first low-pulse
  261.          ADD    A,BUFFER+1    ; plus length of first high-pulse 
  262.          CLR    C
  263.          RRC    A             ; divided by two
  264.          MOV    R1,A
  265.          CLR    C
  266.          RRC    A             ; plus half of the time
  267.          ADD    A,R1
  268.          MOV    R5,A          ; yields threshold
  269.          MOV    R0,#BUFFER
  270.          MOV    R1,#1         ; initial value  
  271.          MOV    R2,#13        ; Number of bits to decode
  272. DECODE:  MOV    A,@R0
  273.          INC    R0
  274.          CLR    C
  275.          SUBB   A,R5          ; compare length with threshold
  276.          MOV    A,#0
  277.          CPL    C             ; short=1
  278.          RLC    A
  279.          JNZ    NOSKIP
  280.          INC    R0            ; if short skip over next pulse
  281. NOSKIP:  XRL    A,R1          ; new bit is calculated by XOR with previous bit
  282.          MOV    R1,A          ; Store new bit
  283.          RRC    A
  284.          MOV    A,R3          ; Store new Bit in R3/R4 by rotating 
  285.          RLC    A
  286.          MOV    R3,A
  287.          MOV    A,R4
  288.          RLC    A
  289.          MOV    R4,A
  290.          DJNZ   R2,DECODE
  291.          MOV    A,R3          
  292.          ANL    A,#00111111B  ; extract command from R3
  293.          MOV    COMMAND,A
  294.          MOV    A,R3        
  295.          RLC    A             ; do some rotating to extract       
  296.          XCH    A,R4
  297.          RLC    A             ;device address 
  298.          XCH    A,R4
  299.          RLC    A       
  300.          XCH    A,R4    
  301.          RLC    A   
  302.          CLR    CONTROL
  303.          JNB    ACC.5,TZ      ; Check control bit
  304.          SETB   CONTROL         
  305. TZ:      ANL    A,#00011111B  ; mask device address
  306.          MOV    SUBAD,A
  307.          POP    ACC           ; Restore old registerset
  308.          POP    PSW
  309.          SETB   NEW           ; Set flag to indicate the new command
  310.          RETI 
  311.  
  312.  
  313. ;  ---------==========----------==========---------=========---------
  314. ;  Main routine. Program execution starts here. Don't forget to add
  315. ;  code to initialize the serial port and Baud rate if your monitor
  316. ;  program doesn't do that for you. The Main loop waits until a command
  317. ;  has been received. Then the control bit, subaddress and command byte 
  318. ;  are printed separated by spaces. Leading zeroes are not suppressed.
  319. ;  When a standby command (12) has been received, the main loop is 
  320. ;  terminated and the program returns to the monitor. 
  321. ;  ---------==========----------==========---------=========---------
  322.  
  323.  
  324. MAIN:    MOV    TCON,#00H     ; MAKE SURE TIMERS ARE SHUT DOWN.
  325.          MOV    PSW,#RB0      ; Select register bank 0
  326.          MOV    SP,STACK
  327.          SETB   EX0           ; Enable external Interrupt0
  328.          CLR    IT0           ; triggered by a high to low transition  
  329.          SETB   EA   
  330.          CLR    NEW
  331. LOOP:    JNB    NEW,LOOP      ; Wait until a command has been received
  332.          MOV    A,#CR
  333.          CALL   C_OUT         ; Ouput carriage return and linefeed
  334.          MOV    A,#LF
  335.          CALL   C_OUT
  336.          MOV    A,FLAGS
  337.          ANL    A,#00000001B
  338.          CALL   BIN2BCD       ; Output control Bit  
  339.          MOV    A,#SPC
  340.          CALL   C_OUT
  341.          MOV    A,SUBAD
  342.          CALL   BIN2BCD       ; Output subaddress
  343.          MOV    A,#SPC
  344.          CALL   C_OUT
  345.          MOV    A,COMMAND
  346.          CALL   BIN2BCD       ; Output command
  347.          MOV    A,COMMAND
  348.          CLR    C
  349.          SUBB   A,#0CH        ; compare for standby command
  350.          CLR    NEW
  351.          JNZ    LOOP          ; go on receiving
  352.          CLR    EX0           ; stop receiving
  353.          CLR    EA            ; and 
  354.          JMP    8000H         ; return to monitor which has its entry point at 8000H
  355.         
  356.          END    
  357.         
  358.  
  359.  
  360.     
  361.  
  362.  
  363.